package com.itcam.param;

import com.itcam.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * Author:Cammy.Wu
 * Date:2024-04-29
 * Description:
 */

@Controller
@RequestMapping("param")
public class ParamController {
    // 1.直接接收
    //      /param/data1?name == root&age = 18
    //      形参列表，填写对应名称的参数！请求参数名 = 形参参数名
    //          1.名称 2.可以不传递 不报错
    @RequestMapping("data1")
    @ResponseBody
    public String data1(String name, int age) {
        System.out.println("name = " + name + ", age = " + age);
        return "name = " + name + ", age = " + age;
    }

    // 2.注解指定
    // 指定任意的请求参数名   要求必须传递  要求不必须传递     给与一个默认值

    //  /param/data2?account=root&page=1
    //  account必须传递     page可以不必须传递，如果不传递默认值就是1

    /*
        @RequestParam -> 形参列表   指定请求参数名 或者是否必须传递 或者非必须传递设置默认值
                        用法： @RequestParam(value = "指定请求参数名，如果形参名和请求参数名一致，可以省略！",
                                            required = false 前端是否必须传递此参数，默认是必须，不传会400异常,
                                            defaultValue = ”1“ 当非必须传递false，可以设置默认值)
     */
    @GetMapping("/data2")
    @ResponseBody
    public String data2(@RequestParam(value = "account") String username,
                        @RequestParam(required = false, defaultValue = "1") int page) {
        System.out.println("username = " + username + ", page = " + page);

        return "username = " + username + ", page = " + page;
    }

    // 3.特殊值
    // 一名多值 key=1&key=2 直接使用集合接值

    // /param/data3?hbs=唱&hbs=跳&hbs=rapper
    // 不加注解@RequestParam 将hbs对应的一个字符串直接赋值给集合！类型异常！
    // 加了注解，handlerAdapter会将集合add加入对应的字符串
    @GetMapping("/data3")
    @ResponseBody
    public String data3(@RequestParam List<String> hbs) {
        System.out.println("hbs = " + hbs);
        return "ok";
    }

    // 4.使用实体对应接值 用户注册（用户的信息） ->  对应的实体类  ->  插入到数据库表
    //  /param/data4?name=叶灵芸&age=19 准备一个对应属性和get|set方法的实体类  -> 形参列表声明对象参数
    @RequestMapping("/data4")
    @ResponseBody
    public String data3(User user){
        System.out.println("user = " + user);
        return user.toString();
    }
}
